package com.gec.teams.wechat.util;

/**
 * 功能：
 * 作者：YumTea
 * 日期：2024/6/14 10:31
 */
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Date;


@Component
public class JwtUtil {
    @Value("${teams.jwt.secret}")
    private String secret;
    @Value("${teams.jwt.cache-expire}")
    private int expire;

    public String createToken(int userId){
//        先设置过期时间
        Date date=DateUtil.offset(new Date(), DateField.DAY_OF_YEAR,expire);//获取过期时间
        //通过配置文件生成密钥
        Algorithm algorithm=Algorithm.HMAC256(secret);//生成密钥
//        生成一个builder
        JWTCreator.Builder builder= JWT.create();
        //生成token
        String token=builder.withClaim("userId",userId).withExpiresAt(date).sign(algorithm);
        return token;
    }

    //通过token 获取用户id
    public int getUserId(String token){
        DecodedJWT jwt=JWT.decode(token);
        int userId=jwt.getClaim("userId").asInt();
        return userId;
    }


//    验证token是否过期以及是否合法
    public void verifierToken(String token){
        Algorithm algorithm=Algorithm.HMAC256(secret);
        JWTVerifier verifier=JWT.require(algorithm).build();
        verifier.verify(token);//令牌错误或过期该方法抛出runtime异常
    }

}
